﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EntitiesLayer;
using Bitacora;
using DataLayer;

namespace BusinessLayer
{
    public static class CleanManager
    {
        public static void LimpiarDatos()
        {
            DateTime ultimaFechaValida = CalcularUltimaFechaValida();
            Services.EnviarLog("Unisys Batch Importer Cleaner",512, "La ultima fecha valida es: " + ultimaFechaValida.ToString("dd/MM/yyyy"),"LimpiarDatos", Bitacora.TipoError.Informacion);

            Services.EnviarLog("Unisys Batch Importer Cleaner", 513, "Buscando Datos Expirados en la Base de Datos","LimpiarDatos", Bitacora.TipoError.Informacion);

            List<Cheque> cheques = SqlDataClass.SQLReadToDelete(ultimaFechaValida);

            if (cheques != null)
            {
                foreach (Cheque cheque in cheques)
                {
                    EliminarData(cheque.direccionData);
                    EliminarImagenes(cheque.imagenAnversa, cheque.imagenReversa);
                    EliminarRegistroBaseDatos(cheque.IDCheque);
                }
                Services.EnviarLog("Unisys Batch Importer Cleaner", 514, "Se procesaron " + cheques.Count.ToString() + " Cheques Vencidos", "LimpiarDatos", Bitacora.TipoError.Informacion);
            }
            else
            {
                Services.EnviarLog("Unisys Batch Importer Cleaner", 517, "No se encontraron Cheques Vencidos", "LimpiarDatos", Bitacora.TipoError.Informacion);
            }
        }

        private static DateTime CalcularUltimaFechaValida()
        {
            return DateTime.Now.AddDays(-Configuracion.diasValidez);
        }

        private static void EliminarData(string dataPath)
        {
            if (Configuracion.eliminarData)
            {
                if (FilesManagement.BorrarArchivo(dataPath, true))
                    Services.EnviarLog("Unisys Batch Importer Cleaner", 256, "Archivo de Data [" + dataPath + "] borrado correctamente", "EliminarData", Bitacora.TipoError.Informacion);
            }
        }

        private static void EliminarImagenes(string ImageFront, string ImageBack)
        {
            if (Configuracion.eliminarImagenes)
            {
                if(FilesManagement.BorrarArchivo(ImageFront,true))
                    Services.EnviarLog("Unisys Batch Importer Cleaner", 257, "Imagen [" + ImageFront + "] Borrada de File System", "EliminarImagenes", Bitacora.TipoError.Informacion);

                if (FilesManagement.BorrarArchivo(ImageBack,true))
                    Services.EnviarLog("Unisys Batch Importer Cleaner", 257, "Imagen [" + ImageBack + "] Borrada de File System", "EliminarImagenes", Bitacora.TipoError.Informacion);
            }
        }

        private static void EliminarRegistroBaseDatos(int IDCheque)
        {
            if (Configuracion.eliminarDeBD)
            {
                if (SqlDataClass.SQLDelete(IDCheque) != -1)
                    Services.EnviarLog("Unisys Batch Importer Cleaner", 258, "Registro [" + IDCheque.ToString() + "] borrado de la Base de Datos", "EliminarRegistroBaseDatos", Bitacora.TipoError.Informacion);
            }
            else
            {
                if (SqlDataClass.ActualizarEstado(IDCheque.ToString(),7) != -1)
                    Services.EnviarLog("Unisys Batch Importer Cleaner", 258, "Registro [" + IDCheque.ToString() + "] actualizado a estado 7 en la Base de Datos", "ActualizarEstadoEnBaseDatos", Bitacora.TipoError.Informacion);
            }
        }

    }
}
